package co.edu.udea.xyz.iu.client;

import java.util.ArrayList;
import java.util.List;

import co.edu.udea.xyz.iu.shared.EmpleadoSingleton;
import co.edu.udea.xyz.iu.shared.dto.SolicitudGWT;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;

public class ListarSolicitudes extends Composite {

	private static ListarSolicitudesUiBinder uiBinder = GWT.create(ListarSolicitudesUiBinder.class);

	interface ListarSolicitudesUiBinder extends	UiBinder<Widget, ListarSolicitudes> {
	}
	
	@UiField
	Label labelMensaje;
	
	@UiField
	FlexTable tabla;
	
	@UiField
	Button agregar;
	
	Solicitud solicitud;
	
	List<SolicitudGWT> solicitudes = new ArrayList<SolicitudGWT>();
	
	public ListarSolicitudes(Solicitud solicitud) {
		initWidget(uiBinder.createAndBindUi(this));
		
		this.solicitud = solicitud;
		
		tabla.setText(0, 0, "IdSolicitud");
		tabla.setText(0, 1, "Estado");
		tabla.setText(0, 2, "Tipo Solicitud");
				
		tabla.getCellFormatter().setWidth(0, 0, "100px");
		tabla.getCellFormatter().setWidth(0, 1, "200px");
		tabla.getCellFormatter().setWidth(0, 2, "200px");
		
		
		tabla.getRowFormatter().addStyleName(0, "tablaHeader");
		
		if(!EmpleadoSingleton.getInstance().getEmpleadoGWT().getRol().equals("gerente de cuenta")){
			agregar.setVisible(false);
		}else{
			tabla.setText(0, 3, "Asignaciones");
			tabla.getCellFormatter().setWidth(0, 3, "60px");
			
			agregar.setVisible(true);
			agregar.addClickHandler(new ClickHandler() {
				
				@Override
				public void onClick(ClickEvent event) {
					agregarSolicitud();
					
				}
			});
		}
		
		
		SolicitudService.util.getInstance().obtenerTodas(new AsyncCallback<List<SolicitudGWT>>() {
			
			@Override
			public void onSuccess(List<SolicitudGWT> result) {
				
				if(result.size()== 0){
					mostrarMensaje("No se obtuvieron resultados de la consulta.");
					return;
				}
				
				solicitudes = result;
				
				for(SolicitudGWT solicitud : solicitudes){
					agregarSolicitud(solicitud);
				}
			}
			
			
			@Override
			public void onFailure(Throwable caught) {
				
				mostrarMensaje(caught.getMessage());
			}
		});
		
	}
	
	
	private void agregarSolicitud(){
		this.setVisible(false);
		solicitud.setListaSolicitudes(this);
		solicitud.setVisible(true);
	}
	
	private void mostrarMensaje(String mensaje){
		labelMensaje.setVisible(true);
		labelMensaje.setText(mensaje);
	}

	public void llenarTabla(){
		
		for(int i=1; i < tabla.getRowCount(); i++){
			tabla.removeRow(i);
		}
		
		for(SolicitudGWT solicitud : solicitudes){
			adicionarSolicitud(solicitud);
		}
	}
	
	public void agregarSolicitud(SolicitudGWT solicitud){
		solicitudes.add(solicitud);
		llenarTabla();
	}
	
	public void adicionarSolicitud(final SolicitudGWT solicitud) {
		
		final int indice = tabla.getRowCount();
		
		String id =String.valueOf(solicitud.getIdSolicitud());
		String estado =solicitud.getEstado();
		String tipo =String.valueOf(solicitud.getTipo_Solicitud());
		tabla.setText(indice, 0, id);
		tabla.setText(indice, 1, estado);
		tabla.setText(indice, 2, tipo);
		
		if(EmpleadoSingleton.getInstance().getEmpleadoGWT().getRol().equals("gerente")){
			Button asignar = new Button("Asignar Gestor");
			tabla.setWidget(indice, 8, asignar);
		
			if(estado == "enviada"){
				asignar.addClickHandler(new ClickHandler() {
				
				@Override
				public void onClick(ClickEvent event) {
					//asignarGestor
					Window.alert("mostrar asignar gestor....");
				}

			});
			}
		}
	}
	

	
	
}
